package com.ccc.scala.base6_object

object Object06_Constructor {
  def main(args: Array[String]): Unit = {
    // Scala中的构造方法
    // 1. 提供无参构造，公共的构造方法

    // 2. scala中构造方法的名称和类名是不一样的
    //    scala是一个完全面向对象的语言，也是完全面向函数的语言，
    //    所以类也是一个函数，声明一个类就等同于声明一个函数
    //    类名的后面可以声明小括号，表示构造参数列表

    // 3. 构造方法可以分为2大类：主构造函数和辅助构造函数
    // 主构造方法：用于完成类的初始化操作
    // 辅助构造方法：方法的名字的this关键字，其他和普通方法一样
    //            作用是在类初始化完成后，做一些辅助功能
    val user = new User() // user...
    val user2 = new User("CJ", "123")
  }

  class User() {
    // 构造方法体 & 类的主体内容
    println("user...")

    var username: String = "CJ"

    def this(name: String) { // 辅助构造函数，使用this关键字声明
      this()
      username = name
    }

    def this(name: String, password: String) { // 构造器调用其他另外的构造器，要求被调用构造器必须提前声明
      this(name)
    }


    def test(): Unit = {
      println(s"name: ${username}")
    }

  }
}
